#include "painter.h"
#include <QPainter>

Painter::Painter(QWidget *parent) :
    QWidget(parent),
    m_isDown(false)
{
}

Painter::~Painter()
{
}

void Painter::mousePressEvent(QMouseEvent *e)
{
    if(e->button() && Qt::LeftButton){
        m_isDown = true;
        m_start = e->pos();
        m_stop = e->pos();
    }
}

void Painter::mouseMoveEvent(QMouseEvent *e)
{
    if(m_isDown){
        m_stop = e->pos();
    }
    update();
}

void Painter::mouseReleaseEvent(QMouseEvent *e)
{
    if(e->button() && Qt::LeftButton){
        m_isDown = false;
    }
}

void Painter::paintEvent(QPaintEvent *)
{
    if(!m_isDown){
        return;
    }
    /*
    Qt 提供了四种坐标变换：平移 translate，旋转 rotate，缩放 scale 和扭曲 shear
    Qt 的坐标分为逻辑坐标和物理坐标。
    Qt 使用 viewport-window 机制将我们提供的逻辑坐标转换成绘制设备使用的物理坐标，
    方法是，在逻辑坐标和物理坐标之间提供一层“窗口”坐标。
    视口是由任意矩形指定的物理坐标；窗口则是该矩形的逻辑坐标表示。
    默认情况下，物理坐标和逻辑坐标是一致的，都等于设备矩形。
    */
    QPainter p(this);
    //p.setViewport(0 ,0 , width() , height()) ;
    //p.setWindow(QRect(0, 0, 1000, 500));
    p.drawRect(QRect(m_start,m_stop));
    p.drawLine(1,1,50,50);
    drawGrid(p);
    drawCurves(p);
}
void Painter::drawCurves(QPainter& painter)
{
    painter.setPen(Qt::red);//将画笔颜色设置为红色
    painter.drawLine(1,1,rand()%500,rand()%500);
}

void Painter::drawGrid(QPainter& painter)
{
    painter.setPen(Qt::green);//将画笔颜色设置为绿色
    for (int u=0;u<300;++u) {//绘制网格的纵轴
        if (u%50 ==0)
        {
            painter. drawLine( -4 , u , 0 , u);
            painter. drawLine( -4 , -u, 0 , -u);
        }
    }
    int xpos = 2;
    if(xpos%10 == 0 || xpos == 0)//绘制网格的横轴
    {
        painter.drawLine(-4, 500, -4, -500);
    }
    ++xpos;
}
